import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))

from fastapi import FastAPI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from pydantic import BaseModel
from config_reader import get_langserver_config, get_openai_api_key

# 获取配置
langserver_config = get_langserver_config()
openai_api_key = get_openai_api_key()

# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = openai_api_key

# 初始化你的 LangChain 模型
model = ChatOpenAI(model=langserver_config['model_name'])
parser = StrOutputParser()

# 把我们的程序部置成服务
# 创建fastAPI的应用
app = FastAPI(
    title=langserver_config['app_title'], 
    version=langserver_config['app_version'], 
    description=langserver_config['app_description']
)


# 定义输入数据的模型
class InputData(BaseModel):
    data: str  # 根据你的需求定义参数
    num: int  # 假设另一个参数是整数


@app.post("/chain")
async def chain_endpoint(input_data: InputData):
    # 创建消息列表
    # 使用输入的数据
    messages = [SystemMessage(content="将以下内容从英语翻译成中文"), HumanMessage(content=input_data.data)]
    # 调用模型
    result = model.invoke(messages)
    # 使用 parser 处理模型返回的结果
    response = parser.invoke(result)
    return {"output": response}


if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host=langserver_config['host'], port=langserver_config['port'])
